package 协程

import kotlinx.coroutines.*

/**
功能：第三种启动方式(runBlocking:T)

作者：JohnRambo
创建日期：2019/8/15 13:13
 */

/*
kotlin协程的三种启动方式
1.runBlocking:T
  runBlocking  方法用于启动一个协程任务，通常只用于启动最外层的协程，例如线程环境切换到协程环境。
  runBlocking启动的协程任务会阻断当前线程，直到该协程执行结束。

2.launch:Job
我们最常用的用于启动协程的方式，它最终返回一个Job类型的对象，这个Job类型的对象实际上是一个接口，它包涵了许多我们常用的方法。例如join()启动一个协程、cancel() 取消一个协程

3.async/await:Deferred
async和await是两个函数，这两个函数在我们使用过程中一般都是成对出现的。
async用于启动一个异步的协程任务，await用于去得到协程任务结束时返回的结果，结果是通过一个Deferred对象返回的。
 */
fun main(args: Array<String>) = runBlocking {
    val job = GlobalScope.async {
        delay(5000L)
        println("async..." + Thread.currentThread().name)
        return@async "hello"
    }
    println(job.await())
}
